home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / gag / SafeRet.lha / SafeRet.mod < prev   
Text File  |  1994-10-12  |  4KB  |  173 lines

  1. MODULE SafeRet;
  2.  
  3. IMPORT e:Exec,
  4.        es:ExecSupport,
  5.        cx:Commodities,
  6.        conv:Conversions,
  7.        ie:InputEvent,
  8.        y:SYSTEM,
  9.        d:Dos,
  10.        wb:Workbench,
  11.        rq:ReqTools,
  12.        ol:OberonLib,
  13.        I: Intuition,
  14.        u: Utility,
  15.        ic:Icon;
  16.  
  17. VAR
  18.      PopKey:ARRAY 100 OF CHAR;
  19.      MyBrk :cx.CxObjPtr;
  20.      MyFil :cx.CxObjPtr;
  21.      MySnd :cx.CxObjPtr;
  22.      MyTrs :cx.CxObjPtr;
  23.      NwBrk :cx.NewBroker;
  24.      MsPrt :e.MsgPortPtr;
  25.      Quit  :BOOLEAN;
  26.      Shut  :BOOLEAN;
  27.      Err   :LONGINT;
  28.      eMsg  :e.APTR;
  29.      Msg   :cx.CxMsgPtr;
  30.      MsTp  :LONGSET;
  31.      MsId  :LONGINT;
  32.      CxPri :LONGINT;
  33.      CxKey :ARRAY 254 OF CHAR;
  34.      Signal:LONGSET;
  35.  
  36. PROCEDURE GetToolTypes;
  37. VAR This:d.ProcessPtr;
  38.     wbm:wb.WBStartupPtr;
  39.     sptr:e.STRPTR;
  40.     MyIcon:wb.DiskObjectPtr;
  41.     OCurrentDir:d.FileLockPtr;
  42. BEGIN;
  43. This:=y.VAL(d.ProcessPtr,ol.Me);
  44. CxPri:=0;CxKey:="return";
  45. IF ol.wbStarted THEN
  46.  wbm:=ol.wbenchMsg;
  47.  OCurrentDir:=This.currentDir;
  48.  y.SETREG(0,d.CurrentDir(wbm.argList[0].lock));
  49.  MyIcon := ic.GetDiskObject(wbm.argList[0].name^);
  50.  y.SETREG(0,d.CurrentDir(OCurrentDir));
  51.  IF MyIcon#NIL THEN
  52.   sptr := ic.FindToolType(MyIcon.toolTypes,"CX_PRIORITY");
  53.   IF sptr#NIL THEN IF conv.StringToInt(sptr^,CxPri) THEN END;END;
  54.   ic.FreeDiskObject(MyIcon);
  55.  END;
  56. END;
  57. END GetToolTypes;
  58.  
  59. PROCEDURE Disable;
  60. BEGIN;
  61. IF cx.ActivateCxObj(MyBrk,0)#0 THEN END;
  62. END Disable;
  63.  
  64. PROCEDURE Enable;
  65. BEGIN;
  66. IF cx.ActivateCxObj(MyBrk,1)#0 THEN END;
  67. END Enable;
  68.  
  69. PROCEDURE Init():BOOLEAN;
  70. VAR ret:BOOLEAN;
  71. BEGIN;
  72. ret:=TRUE;
  73. Shut:=FALSE;
  74. IF ret THEN
  75. MsPrt:=e.CreateMsgPort();
  76. IF MsPrt=NIL THEN ret:=FALSE;END;
  77. IF ret THEN
  78. NwBrk.version:=cx.nbVersion;
  79. NwBrk.name:=y.ADR("SafeRet");
  80. NwBrk.title:=y.ADR("SafeRet 1.0 by HDS");
  81. NwBrk.descr:=y.ADR("Safer System");
  82. NwBrk.unique:=SET{0,1};
  83. NwBrk.flags:=SET{};
  84. NwBrk.pri:=SHORT(SHORT(CxPri));
  85. NwBrk.port:=MsPrt;
  86. NwBrk.reservedChannel:=0;
  87. MyBrk:=cx.CxBroker(NwBrk,Err);
  88. IF Err#0 THEN ret:=FALSE;END;
  89. IF ret THEN
  90. MyFil:=cx.CxFilter(y.ADR(CxKey));
  91. MySnd:=cx.CxSender(MsPrt,cx.cxmIEvent);
  92. MyTrs:=cx.CxTranslate(NIL);
  93. IF cx.CxObjError(MyBrk)#LONGSET{} THEN ret:=FALSE;END;
  94. IF cx.CxObjError(MyFil)#LONGSET{} THEN ret:=FALSE;END;
  95. IF cx.CxObjError(MyTrs)#LONGSET{} THEN ret:=FALSE;END;
  96. cx.AttachCxObj(MyBrk,MyFil);
  97. cx.AttachCxObj(MyFil,MySnd);
  98. cx.AttachCxObj(MyFil,MyTrs);
  99. IF cx.CxObjError(MyBrk)#LONGSET{} THEN ret:=FALSE;END;
  100. IF cx.CxObjError(MyFil)#LONGSET{} THEN ret:=FALSE;END;
  101. IF cx.CxObjError(MyTrs)#LONGSET{} THEN ret:=FALSE;END;
  102. IF cx.ActivateCxObj(MyBrk,1)#0 THEN ret:=FALSE;END;
  103. IF MyFil=NIL THEN ret:=FALSE;END;
  104. IF MySnd=NIL THEN ret:=FALSE;END;
  105. IF MyTrs=NIL THEN ret:=FALSE;END;
  106. IF cx.CxObjError(MyBrk)#LONGSET{} THEN ret:=FALSE;END;
  107. IF cx.CxObjError(MyFil)#LONGSET{} THEN ret:=FALSE;END;
  108. IF cx.CxObjError(MyTrs)#LONGSET{} THEN ret:=FALSE;END;
  109. END;END;END;
  110. RETURN (ret);
  111. END Init;
  112.  
  113. PROCEDURE ShutDown;
  114. BEGIN;
  115. IF MyBrk#NIL THEN cx.DeleteCxObjAll(MyBrk);
  116. REPEAT;UNTIL e.GetMsg(MsPrt)=NIL;END;
  117. IF MsPrt#NIL THEN
  118. e.DeleteMsgPort(MsPrt);END;
  119. END ShutDown;
  120.  
  121. PROCEDURE CheckCx;
  122. VAR iv:ie.InputEventPtr;
  123.     dort:BOOLEAN;
  124. BEGIN;
  125. dort:=FALSE;
  126. IF MsPrt#NIL THEN
  127. REPEAT;
  128. eMsg:=e.GetMsg(MsPrt);
  129. IF eMsg#NIL THEN
  130. Msg:=y.VAL(cx.CxMsgPtr,eMsg);
  131. MsTp:=cx.CxMsgType(Msg);
  132. MsId:=cx.CxMsgID(Msg);
  133. e.ReplyMsg(eMsg);
  134.  IF MsTp=LONGSET{cx.cxmIEvent} THEN
  135.   IF rq.EZRequestTags("Really ?",
  136.   "Yes|No",NIL,NIL,rq.ezFlags,LONGSET{rq.ezReqNoReturnKey},u.done)=1
  137.   THEN
  138.    dort:=TRUE;
  139.   END;
  140.  END;
  141.  IF MsTp=LONGSET{cx.cxmCommand} THEN
  142.   IF MsId=cx.cmdDisable THEN Disable;END;
  143.   IF MsId=cx.cmdEnable THEN Enable;END;
  144.   IF MsId=cx.cmdKill THEN Quit:=TRUE;END;
  145.   IF MsId=cx.cmdUnique THEN Quit:=TRUE;END;
  146.  END;
  147. END;
  148. UNTIL eMsg=NIL;
  149. END;
  150. IF dort THEN
  151.  NEW(iv);
  152.  IF cx.InvertKeyMap(13,iv,NIL)#0 THEN
  153.   cx.AddIEvents(iv);
  154.   DISPOSE(iv);
  155.  END;
  156. END;
  157. END CheckCx;
  158.  
  159. BEGIN;
  160. GetToolTypes;
  161. IF Init() THEN
  162. Enable;
  163. CheckCx;
  164. REPEAT;
  165. e.WaitPort(MsPrt);
  166. CheckCx;
  167. UNTIL Quit;
  168. END;
  169. ShutDown;
  170.  
  171. END SafeRet.
  172.  
  173.